In some development environments, software may be deployed in a continuous development pipeline. A continuous development pipeline may include a plurality of stages in the development pipeline, with each stage representing a different level of progression towards a release or production version of a software artifact (e.g., libraries, user interface components, plugins, and so on used in a software application). An example development pipeline may include an initial stage, one or more testing stages, and a deployment stage. The initial stage may represent a stage in which new software artifacts and updates to existing software artifacts are initially developed and tested for a minimum level of functionality. The one or more testing stages may include different stages to test the integration of the new software artifact or updated software artifact with other software artifacts that make up the software application. These integration tests may ensure that new features work properly, updated features work properly and do not adversely affect other features, and that removed features do not adversely affect the functionality of the software application. The deployment stage of the continuous development pipeline represents a stable release of the software application that may be made available to internal and/or external users for use in a production environment.
The software development lifecycle for a software application, whether built as a desktop application, a mobile application, a web application, or other software executable on a computer system, generally entails development, testing, and release of software artifacts over time. During the software development lifecycle, code may be changed to fix bugs in a previous release of a software artifact, add new features to an application, remove unused or infrequently used features from an application, change the design of the user interface of an application, and so on. Over time, as the code base for a software application changes, the performance of the application may change. For example, adding features that leverage new hardware capabilities may increase the performance of the application on devices that support these new hardware capabilities, but may decrease the performance of the application on devices that do not support these new hardware capabilities. In another example, adding additional code to be executed on a client device or additional resources to be retrieved, processed, and displayed on a client device may decrease the performance of an application. In some cases, developers may notice significant performance degradation between different builds of a software application and modify the source code of one or more software artifacts to address performance degradation issues. In some cases, however, performance degradation may accumulate over time such successive builds of a software application may have relatively small differences in performance, but builds of a software application separated by progressively larger amounts of time may have progressively larger differences in performance.
Thus, what is needed are techniques for managing the deployment of software artifacts to minimize performance impacts on a software application.